package cn.design.realize;

import cn.design.model.Product;

import java.util.List;

/**
 * @author dlq
 * @description
 *      Subject：抽象主题（抽象被观察者），抽象主题角色把所有观察者对象保存在一个集合里，每个主题都可以有任意数量的观察者，抽象主题提供一个接口，可以增加和删除观察者对象
 *      商品仓库抽象类： 定义 增加和删除观察者对象
 * @date 2020/10/14 11:24
 * @since 1.0
 */
public interface StoreSubject {
    /**
     * @description 添加 观察者
     * @param productObserver
     * @return void
     * @author dlq
     * @date 2020/10/14 11:26
     */
    void addProductObserver(ProductObserver productObserver);
    /**
     * @description 删除观察者
     * @param productObserver
     * @return void
     * @author dlq
     * @date 2020/10/14 11:26
     */
    List<ProductObserver> removeProductObserver(ProductObserver productObserver);
    /**
     * @description   添加商品: 对外暴露并且通知给 观察者
     * @param operation
     * @param: product
     * @return void
     * @author dlq
     * @date 2020/10/14 13:53
     */
    void notifyAddProduct(String operation, Product product);
    /**
     * @description 修改商品价格: 对外暴露并且通知给 观察者
     * @param operation
     * @param: product
     * @return void
     * @author dlq
     * @date 2020/10/14 13:59
     */
    void notifyProductUpdatePrice(String operation,Product product);
}
